package gui;

import java.awt.Color;
import java.awt.Frame;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.math.BigDecimal;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.BorderFactory;

import negocios.Classificacao;
import negocios.Fachada;
import negocios.Familia;
import negocios.Insumo;
import negocios.Unidade;

public final class CadastraEditaInsumos extends JDialog {


	private static final long serialVersionUID = 1L;
	
	private Insumo insumo = null;
	    
    private JLabel labDescricao = null;
    private JLabel labPreco = null;
    private JLabel labPonto = null;
    private JLabel labTipo = null;
    private JLabel labCodClassificacao = null;
    private JLabel labCodUnidade = null;
    private JLabel labCodFamilia = null;
    
    private JTextField txfDescricao = null;
    private JTextField txfPreco = null;
    private JTextField txfPonto = null;
    private JTextField txfTipo = null;
    private JTextField txfCodClassificacao = null;
    private JTextField txfCodUnidade = null;
    private JTextField txfCodFamilia = null;
    
    private JButton btConfirmar = null;
    
    private Border labelBorder = null;

    public CadastraEditaInsumos(Frame owner) {

        super(owner);
        initialize();

    }
    
    public CadastraEditaInsumos(Frame owner, Insumo ins) {

        super(owner);
        initialize();
        this.insumo = ins;

    }

    private void initialize() {

        this.setLayout(null);
        this.setTitle("Cadastra/Edita Insumos");
        this.setSize(280, 400);
        this.setModal(true);
        
        labelBorder = BorderFactory.createLineBorder(Color.BLACK);

        this.add(getLabDescricao(), null);
        this.add(getLabPreco(), null);
        this.add(getLabTipo(), null);
        this.add(getLabPonto(), null);
        this.add(getLabCodClassificacao(), null);
        this.add(getLabCodUnidade(), null);
        this.add(getLabCodFamilia(), null);
        
        this.add(getTxfDescricao(), null);
        this.add(getTxfPreco(), null);
        this.add(getTxfTipo(), null);
        this.add(getTxfPonto(), null);
        this.add(getTxfCodClassificacao(), null);
        this.add(getTxfCodUnidade(), null);
        this.add(getTxfCodFamilia(), null);
        
        this.add(getBtConfirmar(), null);

    }

    private JLabel getLabDescricao() {

        if (labDescricao == null) {

            labDescricao = new JLabel();
            labDescricao.setBounds(20, 20, 80, 30);
            labDescricao.setHorizontalAlignment(JLabel.CENTER);
            labDescricao.setBorder(labelBorder);
            labDescricao.setText("Descrição");

        }

        return labDescricao;

    }
    

    private JLabel getLabPreco() {

        if (labPreco == null) {

            labPreco = new JLabel();
            labPreco.setBounds(20, 60, 80, 30);
            labPreco.setHorizontalAlignment(JLabel.CENTER);
            labPreco.setBorder(labelBorder);
            labPreco.setText("Preço");            

        }
        
        return labPreco;

    }
    
    
    private JLabel getLabTipo() {

        if (labTipo == null) {

            labTipo = new JLabel();
            labTipo.setBounds(20, 100, 80, 30);
            labTipo.setHorizontalAlignment(JLabel.CENTER);
            labTipo.setBorder(labelBorder);
            labTipo.setText("Tipo");

        }
        
        return labTipo;

    }
    
    
    private JLabel getLabPonto() {

        if (labPonto == null) {

            labPonto = new JLabel();
            labPonto.setBounds(20, 140, 80, 30);
            labPonto.setHorizontalAlignment(JLabel.CENTER);
            labPonto.setBorder(labelBorder);
            labPonto.setText("Ponto");

        }
        
        return labPonto;

    }
    
    
    private JLabel getLabCodClassificacao() {

        if (labCodClassificacao == null) {

            labCodClassificacao = new JLabel();
            labCodClassificacao.setBounds(20, 180, 80, 30);
            labCodClassificacao.setHorizontalAlignment(JLabel.CENTER);
            labCodClassificacao.setBorder(labelBorder);
            labCodClassificacao.setText("Classificação");

        }
        
        return labCodClassificacao;

    }
    
    
    private JLabel getLabCodUnidade() {

        if (labCodUnidade == null) {

            labCodUnidade = new JLabel();
            labCodUnidade.setBounds(20, 220, 80, 30);
            labCodUnidade.setHorizontalAlignment(JLabel.CENTER);
            labCodUnidade.setBorder(labelBorder);
            labCodUnidade.setText("Unidade");

        }
        
        return labCodUnidade;

    }
    
    
    private JLabel getLabCodFamilia() {

        if (labCodFamilia == null) {

            labCodFamilia = new JLabel();
            labCodFamilia.setBounds(20, 260, 80, 30);
            labCodFamilia.setHorizontalAlignment(JLabel.CENTER);
            labCodFamilia.setBorder(labelBorder);
            labCodFamilia.setText("Família");

        }
        
        return labCodFamilia;

    }

    private JTextField getTxfDescricao() {
    
    	if (txfDescricao == null) {
    		
    		txfDescricao = new JTextField();
    		txfDescricao.setBounds(110, 20, 150, 30);
    		
    		if (this.insumo != null) txfDescricao.setText(this.insumo.getDescricao());
    		
    	}
    	
    	return txfDescricao;
    	
    }
    
    private JTextField getTxfPreco() {
        
    	if (txfPreco == null) {
    		
    		txfPreco = new JTextField();
    		txfPreco.setBounds(110, 60, 150, 30);
    		
    		if (this.insumo != null) txfPreco.setText(this.insumo.getPreco().toString());
    		
    	}
    	
    	return txfPreco;
    	
    }
    
    private JTextField getTxfTipo() {
        
    	if (txfTipo == null) {
    		
    		txfTipo = new JTextField();
    		txfTipo.setBounds(110, 100, 150, 30);
    		
    		if (this.insumo != null) txfTipo.setText(this.insumo.getTipo());
    		
    	}
    	
    	return txfTipo;
    	
    }
    
    private JTextField getTxfPonto() {
        
    	if (txfPonto == null) {
    		
    		txfPonto = new JTextField();
    		txfPonto.setBounds(110, 140, 150, 30);
    		
    		if (this.insumo != null) txfPonto.setText(this.insumo.getPonto());
    		
    	}
    	
    	return txfPonto;
    	
    }
    
    private JTextField getTxfCodClassificacao() {
        
    	if (txfCodClassificacao == null) {
    		
    		txfCodClassificacao = new JTextField();
    		txfCodClassificacao.setBounds(110, 180, 150, 30);
    		
    		if (this.insumo != null) txfCodClassificacao.setText(Integer.toString(this.insumo.getClassificacao().getCodigo()));
    		
    	}
    	
    	return txfCodClassificacao;
    	
    }
    
    private JTextField getTxfCodUnidade() {
        
    	if (txfCodUnidade == null) {
    		
    		txfCodUnidade = new JTextField();
    		txfCodUnidade.setBounds(110, 220, 150, 30);
    		
    		if (this.insumo != null) txfCodUnidade.setText(Integer.toString(this.insumo.getUnidade().getCodigo()));
    		
    	}
    	
    	return txfCodUnidade;
    	
    }
    
    private JTextField getTxfCodFamilia() {
        
    	if (txfCodFamilia == null) {
    		
    		txfCodFamilia = new JTextField();
    		txfCodFamilia.setBounds(110, 260, 150, 30);
    		
    		if (this.insumo != null) txfCodFamilia.setText(Integer.toString(this.insumo.getFamilia().getCodigo()));
    		
    	}
    	
    	return txfCodFamilia;
    	
    }
    
    private JButton getBtConfirmar() { 
    
    	if (btConfirmar == null) {
    		
    		btConfirmar = new JButton();
    		btConfirmar.setText("Confirmar");
    		btConfirmar.setBounds(170, 310, 90, 30);
            btConfirmar.addActionListener(new ActionListener() {

                @Override public void actionPerformed(ActionEvent event) {

                        if (insumo == null) {

                            Classificacao cla = new Classificacao(Integer.parseInt(getTxfCodClassificacao().getText()), "nulo");

                            Unidade und = new Unidade(Integer.parseInt(getTxfCodUnidade().getText()), "nulo", "nulo");

                            Familia fam = new Familia(Integer.parseInt(getTxfCodFamilia().getText()), "nulo", 0);

                            insumo = new Insumo(0,
                                                getTxfDescricao().getText(),
                                                new BigDecimal(getTxfPreco().getText()),
                                                getTxfPonto().getText(),
                                                getTxfTipo().getText(),
                                                cla,
                                                und,
                                                fam);
                            
                            Fachada.getInstancia().inserirInsumo(insumo);

                        } else {

                            Classificacao cla = insumo.getClassificacao();
                            cla.setCodigo(Integer.parseInt(getTxfCodClassificacao().getText()));

                            Unidade und = insumo.getUnidade();
                            und.setCodigo(Integer.parseInt(getTxfCodUnidade().getText()));

                            Familia fam = insumo.getFamilia();
                            fam.setCodigo(Integer.parseInt(getTxfCodFamilia().getText()));

                            insumo.setDescricao(getTxfDescricao().getText());
                            insumo.setPreco(new BigDecimal(getTxfPreco().getText()));
                            insumo.setTipo(getTxfTipo().getText());
                            insumo.setPonto(getTxfTipo().getText());
                            insumo.setClassificacao(cla);
                            insumo.setFamilia(fam);
                            insumo.setUnidade(und);

                            Fachada.getInstancia().editarInsumo(insumo);

                        }


                    }

                }

            );
    		
    	}
    	
    	return btConfirmar;
    
    }    
	
}
